"""
“%”符号:Python提供了“%”符号进行字符串格式化，其语法格式如下。
语法：
    写法1：'%[标志][0][输出最小宽度][.精度]格式字符' %变量    ps:[ ]中的项为可选项
    写法2：'%[±][0][m][.n]格式字符' %变量
（1）标志：标志字符为“+”或“−”，指定输出数据的对齐方式。指定“+”时，右对齐输出；指定“−”时，左对齐输出；缺省时为“+”，默认右对齐。
（2）输出最小宽度：用十进制整数m表示输出的最小位数。若实际位数大于定义的宽度，则按实际位数输出；若实际位数小于定义的宽度，则补空格或0（m前有数字0，则补0）。
（3）精度：精度格式符以“.”开头，后跟十进制整数n。如果输出数字，则表示小数的位数；如果输出字符，则表示输出字符的个数；若实际位数大于所定义的精度，则截去超过的部分。
（4）格式字符：用来表示输出数据的类型，各种格式字符及其说明如表4-3所示。

格式字符	    说 明
s	        字符串
c	        单个字符
%	        字符%
d、i	    十进制整数
o	        八进制整数
x	        十六进制整数
f、F	    浮点数
e、E	    指数（基底为e或E）
g、G	    以f或e中较短的输出宽度输出浮点数
"""
# a = 15  # 定义变量a并赋值
# b = 12345678.1234567  # 定义变量b并赋值
# s = 'I love Python!'  # 定义字符串s并赋值
# print('a = %05d' % a)  # 使用m控制输出位数，空位补0
# print('b = %8.3f' % b)  # 使用m.n控制输出的长度和小数点位数
# print('%17s' % s)  # 使用m控制输出字符串长度
# print('%+17.6s' % s)  # 使用-m.n左对齐、控制字符串长度和字符位数
"""
【程序说明】   输出变量a时，“%05d”表示输出宽度为5并用“0”来补空位。输出变量b时，“%8.3f”表示输出宽度为8，精度为3，由于实际长度超过8位，故应按实际位数输出，小数位数超过3位部分被截去。
       输出字符串s时，“%17s”表示输出字符串宽度为17，如果字符串本身长度不足17，则用空格左补齐，可以看到“I love Python!”前存在3个空格。“%−17.6s”表示输出宽度虽为17，但这里指定了精度“.6”，也就是说指定了输出字符的个数为6，并且用“−”指定了左对齐，所以输出6个字符“I love”，后面还有11个空格。
"""
# b = 10
# print('10 的八进制%4o' % b)
# print('10 的十六进制%4x' % b)
#
# c = 10000
# print('10000的 指数基地位e  %e' % c) #科学计数法


"""
format()方法：使用format()方法也可以格式化字符串
语法：模板字符串.format(逗号分隔的参数)
     模板字符串：由一系列槽（用大括号表示）组成，用于控制字符串中嵌入值出现的位置，其基本思想是，将format()方法中逗号分隔的参数按照序号替换到模板字符串的槽中（序号从0开始）。
"""
#s为'你好，张三，你这个月的工资是8500元！'
# s = '你好，{1}，你这个月的工资是{0}元！'.format(8500, '张三')
# print(s)
# todo如果大括号中没有序号，则按照出现顺序替换 例如：
#s为'你好，8500，你这个月的工资是张三元！'
# s1 = '你好，{}，你这个月的工资是{}元！'.format(8500, '张三')
# print(s1)

"""
format()方法中模板字符串的槽除了包括参数序号外，还可以包括格式控制信息，此时槽的内部格式如下。
语法：{参数序号:格式控制标记}
说明：其中，格式控制标记用于控制参数显示时的格式，它包括“填充”“对齐”“宽度”“,”“.精度”“格式字符”6个可选字段，这些字段可以组合使用。具体的格式控制标记及其说明如表4-4所示。

格式控制标记	说 明
填充	        用于填充的单个字符
对齐	        < 左对齐> 右对齐^ 居中对齐
宽度	        输出宽度
,	        数字的千位分隔符
.精度	    浮点数小数部分精度或字符串最大输出长度
格式字符	    整数类型d、o、x、X、b浮点数类型e、E、f百分比%

【例 4-4】 模拟输出简单的非刷新文本进度条。要求按照任务执行百分比将整个任务划分为100个单位，每执行10%输出一次进度条，每行输出包含进度百分比、代表已完成部分（**）和未完成部分（..）的两种字符，以及一个跟随完成进度前进的小箭头，风格如下：
10%[**->..................]
【问题分析】
 本例题的关键是输出字符的格式，可使用format()方法进行格式化。采用for循环和print()函数构成程序的主体部分，使用格式字符“%”输出百分比，为了使输出整齐，可使用{:>4.0%}格式化百分比部分。
由于程序执行速度太快，不便于观察，可使用time.sleep(t)函数将当前程序暂停t秒，其中，time是Python标准时间库。
"""
s3 = '你好，{:*>12,.2f}，你这个月的工资是{}元！'.format(8500, '张三')
print(s3)

import time				#导入time模块
scale = 10				#变量scale表示输出进度条的精度
print('-----------执行开始-----------')	#输出执行开始提示
for i in range(scale + 1):			#循环变量从0到scale
    done = '**' * i  			#用“*”表示已完成的部分
    undone = '..' * (scale - i)		#用“.”表示未完成的部分
    percent = i / scale 			#计算完成百分比
    #格式化输出
    print('{:>4.0%}[{}->{}]'.format(percent, done, undone))
    time.sleep(0.1)			#暂停0.1秒
print('-----------执行结束-----------')	#输出执行结束提示

